package com.dwy2002.common.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.LinkedHashMap;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/03/24
 */
public class JsonConversionUtils {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 将接收到的对象转换为指定泛型类型。
     *
     * @param source  需要转换的原始对象（通常为反序列化后的 {@link LinkedHashMap} 或集合类型）
     * @param typeRef 用于保留泛型类型信息的 {@link TypeReference}，需通过匿名子类传递目标类型。
     *                <p>示例：{@code new TypeReference<List<User>>() {}}</p>
     *                <p>⚠️ 注意：禁止直接实例化 {@link TypeReference}，必须通过匿名类继承来保留泛型参数。</p>
     * @return 转换后的目标类型对象
     * @throws IllegalArgumentException 若转换过程中类型不兼容
     */
    public static <T> T convertToType(Object source, TypeReference<T> typeRef) {
        return objectMapper.convertValue(source, typeRef);
    }
}
